// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
}) // 使用当前云环境
const db = cloud.database()
const _ = db.command
// 云函数入口函数
exports.main = async (event, context) => {
    console.log(event);
    try {
        // 解析支付结果
        const {
            event_type,
            resource
        } = event

        // 校验支付结果
        if (event_type !== 'REFUND.SUCCESS') {
            console.error('退款失败:', event)
            return {
                success: false,
                message: '退款失败'
            }
        }
        const {
            outTradeNo
        } = resource
        console.log('处理退款订单:', outTradeNo);
        // 开启事务确保数据一致性
        const transaction = await db.startTransaction()
        try {
            // 1. 更新订单状态
            const orderUpdateResult = await transaction.collection('orders')
                .where({
                    outTradeNo
                })
                .update({
                    data: {
                        status: 5,
                        refundTime: db.serverDate(),
                        refundStatus: '已完成'
                    }
                })

            if (orderUpdateResult.stats.updated === 0) {
                await transaction.rollback()
                console.error('未找到对应订单:', outTradeNo)
                return {
                    success: false,
                    message: '未找到对应订单'
                }
            }

            // 2. 查询订单关联的盲盒商品ID
            const orderResult = await transaction.collection('orders')
                .where({
                    outTradeNo:outTradeNo
                })
                .field({
                    goodsId: true
                })
                .get()

            if (orderResult.data.length === 0) {
                await transaction.rollback()
                console.error('订单中未找到商品信息:', outTradeNo)
                return {
                    success: false,
                    message: '订单中未找到商品信息'
                }
            }

            const goodsId = orderResult.data[0].goodsId
            console.log('关联的盲盒商品ID:', goodsId);

            // 3. 修改盲盒商品状态为true
            const goodsUpdateResult = await transaction.collection('blindbox_goods')
                .where({
                    _id: goodsId
                })
                .update({
                    data: {
                        status: true,
                        updateTime: db.serverDate(),
                    }
                })

            if (goodsUpdateResult.stats.updated === 0) {
                await transaction.rollback()
                console.error('未找到对应盲盒商品:', goodsId)
                return {
                    success: false,
                    message: '未找到对应盲盒商品'
                }
            }

            // 提交事务
            await transaction.commit()

            console.log('退款处理完成，盲盒商品状态已更新:', goodsId)
            return {
                success: true,
                message: '退款成功，盲盒商品状态已更新',
                data: event
            }

        } catch (error) {
            await transaction.rollback()
            console.error('事务处理失败:', error)
            return {
                success: false,
                message: '事务处理失败: ' + error.message
            }
        }
    } catch (error) {
        console.error('处理退款回调失败:', error)
        return {
            success: false,
            message: error.message || '处理退款回调失败'
        }
    }
};